package cn.ad.server.web.spring.service.actions.context;//package cn.ad.server.web.spring.service.actions.context;
//
//import java.math.BigDecimal;
//import java.util.ArrayList;
//import java.util.List;
//
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
//
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Component;
//import org.springframework.util.StringUtils;
//
//import com.baidu.bjf.remoting.protobuf.Codec;
//import com.baidu.bjf.remoting.protobuf.ProtobufProxy;
//import com.google.protobuf.CodedInputStream;
//
//import cn.ad.server.common.utils.BrowserUtils;
//import cn.ad.server.common.utils.IPUtils;
//import cn.falconnect.adserver.adapter.IAdServerLogger;
//import cn.falconnect.adserver.adapter.BidAdRequest;
//import cn.falconnect.adserver.adapter.BidAdResponse;
//import cn.falconnect.adserver.adapter.Exchange;
//import cn.falconnect.adserver.adapter.AdViewBidRequest;
//import cn.falconnect.adserver.adapter.GDTApp;
//import cn.falconnect.adserver.adapter.GDTBid;
//import cn.falconnect.adserver.adapter.GDTBidRequest;
//import cn.falconnect.adserver.adapter.GDTBidResponse;
//import cn.falconnect.adserver.adapter.GDTDevice;
//import cn.falconnect.adserver.adapter.GDTDeviceType;
//import cn.falconnect.adserver.adapter.GDTGeo;
//import cn.falconnect.adserver.adapter.GDTImpression;
//import cn.falconnect.adserver.adapter.GDTOs;
//import cn.falconnect.adserver.adapter.GDTSeatBid;
//import cn.falconnect.adserver.adapter.GDTUser;
//import cn.ad.server.web.spring.service.actions.handler.gdt.GDTImpressionHandler;
//import cn.ad.server.biz.internal.AdService;
//import cn.ad.server.domain.IPDetail;
//import cn.ad.server.domain.ad.OS;
//import cn.ad.server.domain.enumration.Gender;
//import cn.ad.server.domain.enumration.MUniqueType;
//
//@Component("gdt")
//public class GDTProcessor extends BidProcessor {
//
//	static Logger logger = LoggerFactory.getLogger(GDTProcessor.class);
//
//	@Autowired
//	private GDTImpressionHandler gdtImpressionHandler;
//
//	@Autowired
//	private IAdServerLogger loggerService;
//
//	@Autowired
//	private AdService adService;
//
//	@Override
//	public BidAdRequest parse(HttpServletRequest request) {
//
//		GDTBidRequest bidRequest = null;
//		try {
//			Codec<GDTBidRequest> gdtBidRequestCodec = ProtobufProxy.create(GDTBidRequest.class);
//
//			// bidRequest =
//			// gdtBidRequestCodec.decode(request.getInputStream().toString().getBytes());
//			CodedInputStream z = CodedInputStream.newInstance(request.getInputStream());
//			bidRequest = gdtBidRequestCodec.readFrom(z);
//		} catch (Exception e) {
//			e.printStackTrace();
//		}
//		return bidRequest;
//	}
//
//	@Override
//	public BidAdResponse doProcess(HttpServletRequest request, HttpServletResponse response, BidAdRequest bidAdRequest,
//			BidContext bidContext) {
//
//		GDTBidRequest gdtBidRequest = (GDTBidRequest) bidAdRequest;
//		GDTBidResponse gdtBidResponse = new GDTBidResponse();
//
//		try {
//			if (gdtBidRequest != null) {
//				gdtBidResponse.setRequest_id(gdtBidRequest.getId());
//			}
//
//			// 处理参数解析异常的处理
//			if (bidContext == null) {
//				// gdtBidRequest.setNbr(AdViewBidResponse.NOT_BID_REASON.INVALID_REQUEST.getValue());
//				return gdtBidResponse;
//			}
//
//			// gdtBidResponse.setRequest_id(gdtBidRequest.getId());
//			List<GDTSeatBid> seatBidList = new ArrayList<GDTSeatBid>();
//
//			List<GDTImpression> impressions = gdtBidRequest.getImpressions();
//
//			for (int i = 0; i < impressions.size(); i++) {
//
//				BidContext impBidContext = (BidContext) bidContext.clone();
//				List<GDTBid> bids = new ArrayList<GDTBid>();
//				try {
//					GDTBid bid = gdtImpressionHandler.handler(impressions.get(i), impBidContext);
//					if (bid != null) {
//						bids.add(bid);
//						GDTSeatBid seatBid = new GDTSeatBid();
//						seatBid.setImpression_id(impressions.get(i).getId());
//						seatBid.setBids(bids);
//						seatBidList.add(seatBid);
//					}
//					// } catch (Exception e) {
//					// logger.error("广点通bid请求处理错误", e);
//				} finally {
//					// 记录日志
//					loggerService.logAdBidRequest(impBidContext);
//				}
//
//			}
//
//			gdtBidResponse.setSeat_bids(seatBidList);
//		} catch (Exception e) {
//			throw e;
//		} finally {
//			adService.unbond();
//		}
//		return gdtBidResponse;
//
//	}
//
//	@Override
//	public BidContext initBidData(BidAdRequest bidAdRequest) {
//		BidContext bidContext = new BidContext();
//		if (bidAdRequest == null)
//			return null;
//		bidContext.setAdxType(Integer.parseInt(Exchange.GDT.getValue()));
//		bidContext.setRequestTimestamp(System.currentTimeMillis());
//		bidContext.setServerId(IPUtils.getHostName());
//
//		GDTBidRequest gdtBidRequest = (GDTBidRequest) bidAdRequest;
//		bidContext.setFeeType("cpm");
//		bidContext.setTransactionType(AdViewBidRequest.AT.SECOND.ordinal());
//		bidContext.setBidId(gdtBidRequest.getId());
//		bidContext.setIp(gdtBidRequest.getIp());
//
//		// Device信息
//		GDTDevice device = gdtBidRequest.getDevice();
//		if (device != null) {
//
//			// bidContext.setDnt(device.getDnt());
//			bidContext.setUa(device.getUser_agent());
//			// 城市解析
//			IPDetail ipDetail = IPContext.instance().getIPDetail(IPUtils.convertIPToLong(bidContext.getIp()));
//			if (ipDetail != null) {
//				bidContext.setCountryId(ipDetail.getCountryId());
//				bidContext.setStateId(ipDetail.getStateId());
//				bidContext.setCityId(ipDetail.getCityId());
//				bidContext.setDistrictId(ipDetail.getDistrictId());
//			}
//			bidContext.setIdfa(device.getIdfa());
//			// bidContext.setImeisha1(device.getDidsha1());
//			// bidContext.setDpidsha1(device.getDpidsha1());
//			// bidContext.setMacsha1(device.getMacsha1());
//			// bidContext.setImeimd5(device.getDidmd5());
//			// bidContext.setDpidmd5(device.getDpidmd5());
//			bidContext.setLanguage(device.getLanguage());
//			bidContext.setAnid(device.getAndroid_id());
//			// bidContext.setBrand(device.getMake());
//			// bidContext.setModal(device.getModel());
//			// int sapIndex = device.getBrand_and_model().indexOf(" ");
//			// String brand = sapIndex > 0
//			// ? device.getBrand_and_model().substring(0,
//			// device.getBrand_and_model().indexOf(" "))
//			// : device.getBrand_and_model();
//			// String model = sapIndex > 0 ? device.getBrand_and_model()
//			// .substring(device.getBrand_and_model().indexOf(" "),
//			// device.getBrand_and_model().length()) : "";
//			// bidContext.setBrand(brand);
//			bidContext.setModal(device.getBrand_and_model());
//
//			boolean init = true;
//
//			// if (StringUtils.hasText(device.getMacmd5())) {
//			// bidContext.setMacmd5(device.getMacmd5());
//			// if (init) {
//			// bidContext.setMuniqueType(MUniqueType.MAC.getValue());
//			// bidContext.setMuniqueId(device.getMacmd5());
//			// init = false;
//			// }
//			// }
//			//
//			// if (StringUtils.hasText(device.getMacsha1())) {
//			// bidContext.setMacsha1(device.getMacsha1());
//			// if (init) {
//			// bidContext.setMuniqueType(MUniqueType.MAC.getValue());
//			// bidContext.setMuniqueId(device.getMacsha1());
//			// init = false;
//			// }
//			// }
//			//
//			// if (StringUtils.hasText(device.getDidmd5())) {
//			// bidContext.setImeimd5(device.getDidmd5());
//			// if (init) {
//			// bidContext.setMuniqueType(MUniqueType.IMEI.getValue());
//			// bidContext.setMuniqueId(device.getDidmd5());
//			// init = false;
//			// }
//			// }
//			//
//			// if (StringUtils.hasText(device.getDidsha1())) {
//			// bidContext.setImeisha1(device.getDidsha1());
//			// if (init) {
//			// bidContext.setMuniqueType(MUniqueType.IMEI.getValue());
//			// bidContext.setMuniqueId(device.getDidsha1());
//			// init = false;
//			// }
//			// }
//
//			if (StringUtils.hasText(device.getIdfa())) {
//				bidContext.setIdfa(device.getIdfa());
//				if (init) {
//					bidContext.setMuniqueType(MUniqueType.IDFA.getValue());
//					bidContext.setMuniqueId(device.getIdfa());
//					init = false;
//				}
//			}
//
//			// 操作系统
//			String os = device.getOs().name();
//			if (os != null) {
//				if (os.toLowerCase().contains("ios")) {
//					bidContext.setOs(OS.ios.getValue());
//				} else if (os.toLowerCase().contains("android")) {
//					bidContext.setOs(OS.android.getValue());
//				} else if (os.toLowerCase().contains("windows")) {
//					bidContext.setOs(OS.windows.getValue());
//				} else {
//					bidContext.setOs(OS.unknown.getValue());
//				}
//			}
//
//			bidContext.setOsVersion(device.getOs_version());
//			// bidContext.setJsEnable(device.getJs());
//			// Connection connection =
//			// AdViewConnection.adViewConnectionMap.get(device.getConnectiontype());
//			// if (connection != null) {
//			bidContext.setConnType(device.getConnection_type().value());
//			// }
//
//			int deviceType = 0;
//			if (device.getDevice_type() == GDTDeviceType.DEVICETYPE_MOBILE) {
//				if (device.getOs() == GDTOs.OS_IOS) {
//					deviceType = 1;
//				} else if (device.getOs() == GDTOs.OS_ANDROID) {
//					deviceType = 2;
//				} else if (device.getOs() == GDTOs.OS_WINDOWS) {
//					deviceType = 4;
//				}
//			} else if (device.getDevice_type() == GDTDeviceType.DEVICETYPE_PAD) {
//				if (device.getOs() == GDTOs.OS_IOS) {
//					deviceType = 3;
//				} else if (device.getOs() == GDTOs.OS_ANDROID) {
//					deviceType = 5;
//				}
//			} else if (device.getDevice_type() == GDTDeviceType.DEVICETYPE_PC) {
//				deviceType = 7;
//			}
//
//			bidContext.setDeviceType(deviceType);
//			bidContext.setScreenDensity(device.getDpi());
//			bidContext.setScreenWidth(device.getScreen_width());
//			bidContext.setScreenHeight(device.getScreen_height());
//			// bidContext.setScreenOritent(device.getOrientation());
//
//			// Operator operator =
//			// AdViewOperator.adViewOperatorMap.get(device.getCarrier());
//			// if (operator != null) {
//			bidContext.setMobOps(device.getCarrier().value());
//			// }
//
//			GDTGeo geo = gdtBidRequest.getGeo();
//			if (geo != null) {
//				float lati = new BigDecimal(geo.getLatitude()).divide(new BigDecimal(1000000)).floatValue();
//				float longitude = new BigDecimal(geo.getLongitude()).divide(new BigDecimal(1000000)).floatValue();
//				bidContext.setLatitude(lati);
//				bidContext.setLongitude(longitude);
//			}
//		}
//
//		GDTApp app = gdtBidRequest.getApp();
//		if (app != null) {
//			bidContext.setAppId(app.getApp_bundle_id());
//			// bidContext.setAppName(app.getName());
//			// // FIXME 需要做类型转换
//			// bidContext.setAppType(StringUtil.arrayToCommaDelimitedString(app.getCat()));
//			// bidContext.setAppDomain(app.getDomain());
//			// bidContext.setAppVersion(app.getVer());
//			// bidContext.setAppBundle(app.getBundle());
//			// bidContext.setAppStoreUrl(app.getStoreurl());
//			// bidContext.setAppKeywords(app.getKeywords());
//			// bidContext.setAppIsPay(app.getPaid());
//		}
//
//		bidContext.setBrowser(BrowserUtils.getBrowser(bidContext.getUa()));
//		GDTUser user = gdtBidRequest.getUser();
//		if (user != null) {
//			bidContext.setUserId(user.getId());
//			// 用户性别
//			String gender = user.getUser_demographic().getGender().toString();
//			if ("GENDER_MALE".equals(gender)) {
//				bidContext.setGender(Gender.MALE.getValue());
//			} else if ("GENDER_FEMALE".equals(gender)) {
//				bidContext.setGender(Gender.FEMALE.getValue());
//			} else {
//				bidContext.setGender(Gender.UNKNOWN.getValue());
//			}
//			// bidContext.setInteresting(user.getKeywords());
//			bidContext.setAgeLow(user.getUser_demographic().getAge_low());
//			bidContext.setAgeHigh(user.getUser_demographic().getAge_high());
//		}
//
//		// bidContext.setIncludeAdvertiser(StringUtils.arrayToCommaDelimitedString(adViewBidRequest.getWeat()));
//		// bidContext.setExcludeIndustryCategory(StringUtils.arrayToCommaDelimitedString(adViewBidRequest.getBcat()));
//		// bidContext.setExcludeAdvertiserDomain(StringUtils.arrayToCommaDelimitedString(adViewBidRequest.getBadv()));
//
//		return bidContext;
//	}
//
//}
